package countStudents;

import java.util.ArrayDeque;
import java.util.Arrays;
import java.util.Deque;
import java.util.Stack;

public class Solution {
    public int countStudents(int[] students, int[] sandwiches) {
//        Stack<Integer> stack = new Stack<>();
//        Deque<Integer> deque = new ArrayDeque<>();
//        int n = sandwiches.length;
//        for (int i = n-1; i>=0 ; i--) {
//            stack.push(sandwiches[i]);
//        }
//        for (int i = 0; i < n; i++) {
//            deque.addLast(students[i]);
//        }
//        // 模拟
//        int t = 0;
//        while (!stack.isEmpty()&&!deque.isEmpty()){
//            if(stack.peek()==deque.peekFirst()){
//                stack.pop();
//                deque.pollFirst();
//                t = 0;
//            }else {
//                deque.addLast(deque.pollFirst());
//                t++;
//            }
//            if(t >= deque.size()){
//                break;
//            }
//        }
//        return deque.size();

        // 假设喜欢吃方三明治的学生是s0 喜欢吃圆三明治的学生为s2
        // 那么当排到方型三明治的时候 就看方型三明治的学生还有多少 如果没得了 那么就都没得吃了 如果还有 那么就s1--
        int s1 = Arrays.stream(students).sum();
        int s2 = students.length-s1;
        for (int sand: sandwiches) {
            if(sand == 1){
                if(s1>0){
                    s1--;
                }else {
                    return s2;
                }
            }else {
                if(s2>0){
                    s2--;
                }else {
                    return s1;
                }
            }
        }
        return 0;
    }
}
